<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>设计模式六大原则 - 面向对象设计的基石</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css">
    <link rel="stylesheet" href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            color: #333;
            line-height: 1.6;
        }
        .hero {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        .font-serif {
            font-family: 'Noto Serif SC', serif;
        }
        .card-hover {
            transition: all 0.3s ease;
        }
        .card-hover:hover {
            transform: translateY(-5px);
            box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
        }
        .principle-icon {
            font-size: 2.5rem;
            color: #667eea;
        }
        .footer-link {
            transition: all 0.3s ease;
        }
        .footer-link:hover {
            color: #667eea;
        }
    </style>
</head>
<body class="bg-gray-50">
    <!-- Hero Section -->
    <section class="hero text-white py-20 md:py-32 px-4 md:px-0">
        <div class="container mx-auto max-w-5xl text-center">
            <h1 class="font-serif text-4xl md:text-6xl font-bold mb-6 animate-fade-in">设计模式六大原则</h1>
            <p class="text-xl md:text-2xl max-w-3xl mx-auto mb-8">面向对象设计的基石，打造健壮、灵活、可维护的软件系统</p>
            <div class="w-20 h-1 bg-white mx-auto mb-12"></div>
            <p class="text-lg md:text-xl max-w-3xl mx-auto opacity-90">六大关键理念指导软件设计，提高系统的灵活性、可维护性和可扩展性</p>
        </div>
    </section>

    <!-- Introduction -->
    <section class="py-16 px-4 md:px-0">
        <div class="container mx-auto max-w-5xl">
            <div class="bg-white rounded-xl shadow-lg p-8 md:p-12">
                <h2 class="font-serif text-3xl font-bold text-gray-800 mb-6">设计原则的重要性</h2>
                <p class="text-lg text-gray-700 mb-6">设计模式的六大原则是指导设计和构建软件系统的关键理念，旨在提高系统的灵活性、可维护性和可扩展性。这六大原则共同构成了面向对象设计和编程的基石，通过遵循这些原则，可以设计出更加健壮、灵活和可维护的软件系统。</p>
                
                <!-- Mermaid Diagram -->
                <div class="mermaid mt-8">
                    graph TD
                    A[设计模式六大原则] --> B[单一职责原则]
                    A --> C[开放封闭原则]
                    A --> D[里氏替换原则]
                    A --> E[接口隔离原则]
                    A --> F[依赖倒置原则]
                    A --> G[最少知识原则]
                </div>
            </div>
        </div>
    </section>

    <!-- Principles Section -->
    <section class="py-16 px-4 md:px-0">
        <div class="container mx-auto max-w-5xl">
            <h2 class="font-serif text-3xl font-bold text-center text-gray-800 mb-12">六大设计原则详解</h2>
            
            <div class="grid md:grid-cols-2 gap-8">
                <!-- Principle 1 -->
                <div class="bg-white rounded-xl shadow-md overflow-hidden card-hover">
                    <div class="p-8">
                        <div class="flex items-center mb-6">
                            <div class="principle-icon mr-4">
                                <i class="fas fa-bullseye"></i>
                            </div>
                            <h3 class="font-serif text-2xl font-bold text-gray-800">1. 单一职责原则</h3>
                        </div>
                        <p class="text-gray-600 mb-4"><strong>定义：</strong>一个类应当仅有一个理由引起变化，也就是说，一个类应该只有一个职责。</p>
                        <p class="text-gray-600"><strong>解释：</strong>如果一个类承担了多个职责，当这些职责中的任何一个发生变化时，可能会影响到类的其他部分，从而使得系统变得难以维护。遵循单一职责原则可以使系统中的每个类都专注于单一的功能，从而提高代码的可读性和可维护性。</p>
                    </div>
                </div>

                <!-- Principle 2 -->
                <div class="bg-white rounded-xl shadow-md overflow-hidden card-hover">
                    <div class="p-8">
                        <div class="flex items-center mb-6">
                            <div class="principle-icon mr-4">
                                <i class="fas fa-door-open"></i>
                            </div>
                            <h3 class="font-serif text-2xl font-bold text-gray-800">2. 开放封闭原则</h3>
                        </div>
                        <p class="text-gray-600 mb-4"><strong>定义：</strong>软件实体（类、模块、函数等）应当对扩展开放，对修改封闭。</p>
                        <p class="text-gray-600"><strong>解释：</strong>这意味着一个类或模块应当能够在不修改其源代码的情况下，进行功能的扩展。通过使用抽象类、接口和设计模式（如策略模式、工厂模式），可以在系统中添加新的功能，而不需要修改已有的代码，从而降低系统的风险。</p>
                    </div>
                </div>

                <!-- Principle 3 -->
                <div class="bg-white rounded-xl shadow-md overflow-hidden card-hover">
                    <div class="p-8">
                        <div class="flex items-center mb-6">
                            <div class="principle-icon mr-4">
                                <i class="fas fa-exchange-alt"></i>
                            </div>
                            <h3 class="font-serif text-2xl font-bold text-gray-800">3. 里氏替换原则</h3>
                        </div>
                        <p class="text-gray-600 mb-4"><strong>定义：</strong>子类对象必须能够替代父类对象出现在任何地方，而不改变程序的正确性。</p>
                        <p class="text-gray-600"><strong>解释：</strong>遵循里氏替换原则意味着子类应当实现父类的接口，并且可以在不影响系统功能的情况下替代父类对象。如果子类在某些情况下不能替代父类对象，可能会导致程序的错误或不稳定。</p>
                    </div>
                </div>

                <!-- Principle 4 -->
                <div class="bg-white rounded-xl shadow-md overflow-hidden card-hover">
                    <div class="p-8">
                        <div class="flex items-center mb-6">
                            <div class="principle-icon mr-4">
                                <i class="fas fa-project-diagram"></i>
                            </div>
                            <h3 class="font-serif text-2xl font-bold text-gray-800">4. 接口隔离原则</h3>
                        </div>
                        <p class="text-gray-600 mb-4"><strong>定义：</strong>客户端不应被迫依赖于它不需要的接口。</p>
                        <p class="text-gray-600"><strong>解释：</strong>一个类只应当实现那些它真正使用的接口，而不应当被强制实现不需要的接口。这可以通过创建多个小的、专用的接口来实现，而不是一个大的、通用的接口，从而使得系统更加模块化和灵活。</p>
                    </div>
                </div>

                <!-- Principle 5 -->
                <div class="bg-white rounded-xl shadow-md overflow-hidden card-hover">
                    <div class="p-8">
                        <div class="flex items-center mb-6">
                            <div class="principle-icon mr-4">
                                <i class="fas fa-random"></i>
                            </div>
                            <h3 class="font-serif text-2xl font-bold text-gray-800">5. 依赖倒置原则</h3>
                        </div>
                        <p class="text-gray-600 mb-4"><strong>定义：</strong>高层模块不应依赖于低层模块，二者都应依赖于抽象；抽象不应依赖于细节，细节应依赖于抽象。</p>
                        <p class="text-gray-600"><strong>解释：</strong>依赖倒置原则提倡高层模块（业务逻辑）和低层模块（具体实现）都应依赖于抽象层，而不是具体的实现。这样可以使系统更加灵活，便于对系统进行扩展和维护。通过使用依赖注入（DI）等技术，可以有效地实现这一原则。</p>
                    </div>
                </div>

                <!-- Principle 6 -->
                <div class="bg-white rounded-xl shadow-md overflow-hidden card-hover">
                    <div class="p-8">
                        <div class="flex items-center mb-6">
                            <div class="principle-icon mr-4">
                                <i class="fas fa-user-secret"></i>
                            </div>
                            <h3 class="font-serif text-2xl font-bold text-gray-800">6. 最少知识原则</h3>
                        </div>
                        <p class="text-gray-600 mb-4"><strong>定义：</strong>一个对象应该对其他对象有尽可能少的了解。换句话说，一个对象应当只与它直接的朋友交流，而不应当与它的朋友的朋友进行交互。</p>
                        <p class="text-gray-600"><strong>解释：</strong>最少知识原则旨在降低对象之间的耦合度，减少系统中的依赖关系。遵循该原则可以使得系统中的每个对象都具有较高的内聚性，同时降低系统的复杂性和维护成本。</p>
                    </div>
                </div>
            </div>
        </div>
    </section>

    <!-- Summary Section -->
    <section class="py-16 px-4 md:px-0 bg-gray-100">
        <div class="container mx-auto max-w-5xl">
            <div class="bg-white rounded-xl shadow-lg p-8 md:p-12">
                <h2 class="font-serif text-3xl font-bold text-gray-800 mb-6">六大原则的协同作用</h2>
                <p class="text-lg text-gray-700 mb-6">这六大设计原则相互关联、相互支持，共同构成了面向对象设计的坚实基础。遵循这些原则能够帮助我们构建出更加:</p>
                <ul class="grid md:grid-cols-3 gap-6 mb-8">
                    <li class="flex items-start">
                        <div class="bg-blue-100 p-3 rounded-full mr-4">
                            <i class="fas fa-shield-alt text-blue-600"></i>
                        </div>
                        <div>
                            <h4 class="font-serif font-bold text-gray-800 mb-1">健壮的系统</h4>
                            <p class="text-gray-600 text-sm">减少错误和异常情况</p>
                        </div>
                    </li>
                    <li class="flex items-start">
                        <div class="bg-purple-100 p-3 rounded-full mr-4">
                            <i class="fas fa-sliders-h text-purple-600"></i>
                        </div>
                        <div>
                            <h4 class="font-serif font-bold text-gray-800 mb-1">灵活的系统</h4>
                            <p class="text-gray-600 text-sm">易于适应需求变化</p>
                        </div>
                    </li>
                    <li class="flex items-start">
                        <div class="bg-green-100 p-3 rounded-full mr-4">
                            <i class="fas fa-tools text-green-600"></i>
                        </div>
                        <div>
                            <h4 class="font-serif font-bold text-gray-800 mb-1">可维护的系统</h4>
                            <p class="text-gray-600 text-sm">降低开发和维护成本</p>
                        </div>
                    </li>
                </ul>
                <div class="mermaid">
                    graph LR
                    A[单一职责] --> E[高内聚]
                    B[开放封闭] --> E
                    C[里氏替换] --> E
                    D[接口隔离] --> F[低耦合]
                    E --> G[可维护性]
                    F --> G
                    G --> H[高质量软件]
                </div>
            </div>
        </div>
    </section>

    <!-- Footer -->
    <footer class="bg-gray-900 text-white py-12 px-4">
        <div class="container mx-auto max-w-5xl text-center">
            <div class="mb-4">
                <h3 class="font-serif text-xl font-bold mb-2">技术小馆</h3>
                <a href="http://www.yuque.com/jtostring" class="footer-link text-gray-300 hover:text-white">http://www.yuque.com/jtostring</a>
            </div>
            <p class="text-sm text-gray-500">© 2023 设计模式六大原则专题</p>
        </div>
    </footer>

    <script>
        mermaid.initialize({
            startOnLoad: true,
            theme: 'default',
            flowchart: {
                useMaxWidth: true,
                htmlLabels: true,
                curve: 'basis'
            }
        });
    </script>
</body>
</html>